namespace FireStarter.CodeGeneration.Parser
{
    public class ParserUtilities
    {
        public static int IndexOfCorrespondingEndTag(string startTag, string endTag, string text)
        {
            int levelsDeep = 0;
            int currentPos = 0;
            while(true) 
            {
                int startTagPos = text.IndexOf(startTag, currentPos);
                int endTagPos = text.IndexOf(endTag, currentPos);
                bool hasStartTag = startTagPos >= 0;
                bool hasEndTag = endTagPos >= 0;
                if (hasStartTag)
                {
                    if (startTagPos < endTagPos)
                    {
                        levelsDeep++;
                        currentPos = startTagPos + startTag.Length;
                    }

                    if (endTagPos < startTagPos)
                    {
                        if (levelsDeep == 0) return endTagPos;
                        levelsDeep--;
                        currentPos = endTagPos + endTag.Length;
                    }
                } else
                {
                    if (hasEndTag)
                    {
                        if (levelsDeep == 0)
                        {
                            return endTagPos;
                        }
                        levelsDeep--;
                        currentPos = endTagPos + endTag.Length;
                    } else
                    {
                        return -1;
                    }
                }
            }
        }
    }
}